package com.adtec.base.cloud.commons.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * @author gaoxfa
 */

@Component
@Slf4j
public class FileTool {

    //检查文件是否是图片
    public boolean checkFileIsImage(MultipartFile file) {
        String fileName = file.getOriginalFilename();// 文件名
        String fileExtension = ""; // 文件扩展名
        fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if (".jpg".equals(fileExtension.toLowerCase())) {
            return true;
        } else if (".png".equals(fileExtension.toLowerCase())) {
            return true;
        } else if (".jpeg".equals(fileExtension.toLowerCase())) {
            return true;
        } else if (".gif".equals(fileExtension.toLowerCase())) {
            return true;
        } else {
            return false;
        }
    }

    //检查文件是否是PDF
    public boolean checkFileIsPdf(MultipartFile file) {
        String fileName = file.getOriginalFilename();// 文件名
        String fileExtension = ""; // 文件扩展名
        fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if (".pdf".equals(fileExtension.toLowerCase())) {
            return true;
        } else {
            return false;
        }
    }

    //检查文件是否是视频
    public boolean checkFileIsVideo(MultipartFile file) {
        String fileName = file.getOriginalFilename();// 文件名
        String fileExtension = ""; // 文件扩展名
        fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if (".avi".equals(fileExtension.toLowerCase())) {
            return true;
        } else if (".mp4".equals(fileExtension.toLowerCase())) {
            return true;
        } else if (".flv".equals(fileExtension.toLowerCase())) {
            return true;
        } else {
            return false;
        }
    }

    //获取文件类型
    public String getFileType(MultipartFile file) {
        String uploadfileName = file.getOriginalFilename();// 文件名
        String fileExtension = ""; // 文件扩展名
        fileExtension = uploadfileName.substring(uploadfileName.lastIndexOf("."));
        return fileExtension;
    }

    //将文件上传并返回FILE对象
    public File conversionType(MultipartFile multipartfile) {
        //在根目录下创建一个tempfileDir的临时文件夹
        String contextpath = "./tempfileDir" + "/" + UuidUtil.generate();
        File f = new File(contextpath);
        if (!f.exists()) {
            f.mkdirs();
        }
        //在tempfileDir的临时文件夹下创建一个新的和上传文件名一样的文件
        String filename = multipartfile.getOriginalFilename();
        String filepath = contextpath + "/" + filename;
        File newFile = new File(filepath);

        //将MultipartFile文件转换，即写入File新文件中，返回File文件
        try {
            log.info("开始写入文件内容:" + newFile);
            log.info(String.valueOf(newFile.exists()));
            newFile.createNewFile();
            if (newFile.exists()) {
                log.info("文件生成成功,开始写入内容");
                InputStream inputStream = multipartfile.getInputStream();
                byte[] buffer = new byte[inputStream.available()];
                inputStream.read(buffer);
                OutputStream outStream = new FileOutputStream(newFile);
                outStream.write(buffer);
            } else {
                log.info("文件创建失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("转换之后的文件：" + newFile);
        return newFile;
    }
}
